home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-11-29 | 5.3 KB | 256 lines | [TEXT/MPS ] |
- // ©1992 Conrad Carlen & Manuel Veloso. All rights reserved.
- #ifndef __PLSTRINGFUNCS__
- #include <PLstringfuncs.h>
- #endif
-
- #ifndef __MEMORY__
- #include <Memory.h>
- #endif
-
- #ifndef __FILES__
- #include <Files.h>
- #endif
-
- #ifndef __RESOURCES__
- #include <Resources.h>
- #endif
-
- #ifndef _IDLE_
- #include "idle.h"
- #endif
-
- #ifndef _PAPFILE_
- #include "PapFile.h"
- #endif
-
- #define pStrCopy(src, dst) (BlockMove(src, dst, src[0]+1))
-
- // CPapCode
- //--------------------------------------------------------------------------
-
- #pragma segment PAPCode
- CPapCode::CPapCode()
- {
- fPapPtr = nil;
- fPapHandle = nil;
- }
-
- #pragma segment PAPCode
- CPapCode::~CPapCode()
- {
- if (fPapPtr)
- {
- PAPUnload(GetPapPtr());
- DisposHandle(fPapHandle);
- fPapPtr = nil;
- fPapHandle = nil;
- }
- }
-
- #pragma segment PAPCode
- OSErr CPapCode::IPapCode()
- {
- OSErr error;
-
- error = GetPDEF();
- if (error)
- {
- fPapPtr = nil;
- fPapHandle = nil;
- }
- return error;
- }
-
- #pragma segment PAPCode
- OSErr CPapCode::FindLaserwriter(FSSpec &theFile)
- {
- long temp = 0;
- OSErr error;
- FInfo theInfo;
- SysEnvRec theWorld;
-
- error = MyFindFolder(theFile.vRefNum, theFile.parID, kExtensionFolderType);
- if (!error)
- {
- PLstrcpy(theFile.name, "\pLaserWriter");
- error = HGetFInfo(theFile.vRefNum, theFile.parID, theFile.name, &theInfo);
- if (error) // laserwriter isn’t in the extensions folder; try system folder
- {
- SysEnvirons(curSysEnvVers, &theWorld);
- GetWDInfo(theWorld.sysVRefNum, &(theFile.vRefNum), &(theFile.parID), &temp);
- error = HGetFInfo(theFile.vRefNum, theFile.parID, theFile.name, &theInfo);
- }
- }
- return error;
- }
-
- #pragma segment PAPCode
- OSErr CPapCode::MyFindFolder(short &vRefNum, long &parID, OSType type)
- {
- OSErr error;
-
- error = FindFolder(kOnSystemDisk, type, kDontCreateFolder, &vRefNum, &parID);
- return error;
- }
-
- #pragma segment PAPCode
- OSErr CPapCode::GetPDEF()
- {
- OSErr error;
- short refNum;
- FSSpec theFile;
-
- error = FindLaserwriter(theFile);
- nrequire(error, findlaser);
-
- refNum = HOpenResFile(theFile.vRefNum, theFile.parID, theFile.name, fsRdPerm);
- require_action(refNum != -1, hopenresfile, error = ResError(););
-
- fPapHandle = Get1Resource('PDEF', 10);
- require_action(fPapHandle, get1resource, error = ResError(););
-
- MoveHHi(fPapHandle);
- HLock(fPapHandle);
- fPapPtr = StripAddress(*fPapHandle);
- DetachResource(fPapHandle);
-
- get1resource:
- hopenresfile:
- CloseResFile(refNum);
- findlaser:
- return error;
- }
-
- // CPapFile
- //--------------------------------------------------------------------------
-
- #pragma segment Main
- CPapFile::CPapFile()
- {
- fReadBuffer.buf = nil;
- fWriteBuffer.buf = nil;
- fThePrinter.objStr[0] = 0; // no printer
- fLastReadError = fLastWriteError = fCurrentError = noErr;
- fRefNum = -1;
- fReadStatus = fWriteStatus = fOpenStatus = fReadEOF = fWriteEOF = 0;
- fStatus.status[0] = 0;
- }
-
- #pragma segment Main
- CPapFile::~CPapFile()
- {
- if (GetPapPtr() && (GetRefNum() != -1))
- {
- Close();
- }
- if (fReadBuffer.buf)
- {
- delete [] fReadBuffer.buf;
- }
- if (fWriteBuffer.buf)
- {
- delete [] fWriteBuffer.buf;
- }
- }
-
- #pragma segment Main
- OSErr CPapFile::IPapFile(short readBufferSize, short writeBufferSize)
- {
- OSErr error;
-
- error = IPapCode();
- nrequire(error, nopapcode);
-
- fReadBuffer.buf = new char[readBufferSize+1];
- require_action(fReadBuffer.buf, readbuf, error = -108;);
-
- fReadBuffer.size = readBufferSize;
- fReadBuffer.buf[readBufferSize] = 0; // so we can use c-string stuff on it
-
- fReadBuffer.count = 0;
- fWriteBuffer.buf = new char[writeBufferSize+1];
- require_action(fWriteBuffer.buf, writebuf, error = -108;);
-
- fWriteBuffer.size = writeBufferSize;
- fWriteBuffer.buf[writeBufferSize] = 0; // so we can use c-string stuff on it
- fWriteBuffer.count = 0;
-
- return error;
- writebuf:
- delete [] fReadBuffer.buf;
- readbuf:
- nopapcode:
- return error;
- }
-
- #pragma segment Main
- OSErr CPapFile::Open(EntityName &thePrinter)
- {
- OSErr error;
- short offset;
-
- offset = 0;
- PLstrcpy(&fThePrinter.objStr[0], &thePrinter.objStr[0]); // for some reason, NBPExtract won’t
- offset += thePrinter.objStr[0]+1;
- PLstrcpy(&fThePrinter.typeStr[0], &thePrinter.objStr[offset]);
- offset += fThePrinter.typeStr[0]+1;
- PLstrcpy(&fThePrinter.zoneStr[0], &thePrinter.zoneStr[offset]);
- error = PAPOpen(&fRefNum, &thePrinter, kFlowQuantum, &fStatus, &fOpenStatus, GetPapPtr());
- return error;
- }
-
- #pragma segment Main
- OSErr CPapFile::Read()
- {
- OSErr error;
- error = PAPRead(GetRefNum(), GetReadBufferAddress(), &fReadBuffer.count, &fReadEOF, &fReadStatus, GetPapPtr());
- fLastReadError = fCurrentError = error;
- }
-
- #pragma segment Main
- OSErr CPapFile::Write()
- {
- OSErr error;
- error = PAPWrite(GetRefNum(), GetWriteBufferAddress(), GetWriteCount(), fWriteEOF, &fWriteStatus, GetPapPtr());
- if (!error)
- {
- while (GetWriteStatus() > 0)
- {
- idle();
- }
- }
- fLastWriteError = fCurrentError = error;
- }
-
- #pragma segment Main
- OSErr CPapFile::Close()
- {
- OSErr error;
- long temp;
- short writeState;
-
- if (fRefNum == -1) return noErr;
- error = PAPWrite(GetRefNum(), (char *)&temp, 0, true, &writeState, GetPapPtr());
- if (!error)
- {
- while (writeState > 0)
- {
- idle();
- }
- }
- error = PAPClose(GetRefNum(), GetPapPtr());
- fRefNum = -1;
- fCurrentError = error;
- }
-
- #pragma segment Main
- OSErr CPapFile::Status()
- {
- OSErr error;
- EntityName thePrinter;
-
- NBPSetEntity((Ptr) &thePrinter, (Ptr) fThePrinter.objStr, (Ptr) fThePrinter.typeStr, (Ptr) fThePrinter.zoneStr);
- error = PAPStatus(&thePrinter, &fStatus, GetPapPtr());
- fCurrentError = error;
- }
-